//
//  CZPlaceHolder.swift
//  SinaWeibo
//
//  Created by 浩记 on 16/3/20.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
/// 带占位文本的textView
class CZPlaceHolderTextView: UITextView {

    //MARK:- 属性
    var placeholderString : String?{
        didSet{
            placeholderLabel.text = placeholderString
            placeholderLabel.sizeToFit()
            placeholderLabel.font = self.font!
            
        }
    }
    //覆盖父类方法，系统自动调用，，
    /**
    监听文本值的改变
    */
    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)//要先调用弗父类
        //不能用代理来监听文字的改变，因为有可能被外面被别人用代理覆盖，比如键盘监听
        //第一个参数：通知的发送者，如果填nil，不管是谁发送这个通知，都能监听到
        //第二个参数：回调方法
        //第三个参数：通知名字，系统有带”文本值改变“
        //第四个参数：要接受通知的接收者
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "textViewDidChanged", name: UITextViewTextDidChangeNotification, object: self)
    }

    //不知道什么鬼方法，系统要求如果覆盖实现了上面重构方法就要实现
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    //对象销毁的时候掉用
    deinit{
        //移除通知监听,,野指针
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    func textViewDidChanged () {
        //文本值发生改变，有值的时候自己的展位文本Label就隐藏
        placeholderLabel.hidden = hasText()//hasText()判断一个label是否有文字
    }
    

    //MARK:- 懒加载
    //占位文本label
    private lazy var placeholderLabel : UILabel = {
        let label = UILabel()
        //添加
        self.addSubview(label)
        label.font = self.font!
        label.sizeToFit()
        label.textColor = UIColor.lightGrayColor()
//        //添加约束,使用系统的约束
        label.translatesAutoresizingMaskIntoConstraints = false
        self.addConstraint(NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 5))
        self.addConstraint(NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 8))
        
        
        return label
    }()
}
